Arduino - Lendo Tecla Controlando Led 2

Projeto 03 - Lendo Tecla Controlando Led 2

Neste projeto iremos ler uma tecla. Se ela estiver pressionada ela muda o estado do led - De aceso para apagado e vice-versa.

O intuito deste projeto é ler uma tecla e alterar o conteúdo de uma 'memória' e ai controlar algo dependendo do valor dessa 'memória'.

Utilizei uma tecla de contato momentâneo mas se você só tiver uma tecla normal pode usar sem problemas.
O resistor pode ser qualquer um entre 1k e 100k.


Esquema :


Programa :
/*
Projeto 02 - LeTeclaControlaLed

O Objetivo deste projeto é ler uma tecla que ao ser pressionado acende o led
    e ao soltamos a tecla o led apaga

Para este projeto você precisará de um resistor de 1K e uma tecla Normalmente aberta.

Temos uma tecla instalada na Porta D0 ligada da seguinte maneira :
    O resistor deve estar ligado entre VCC(+5V) e o pino D0
    A chave deve estar ligada ao Pino D0 e a terra.
Veja no esquema como conectar

Portanto ao medir LOW no pino D0 significa que estamos pressionando a tecla
          Se medirmos HIGH significa que a tecla esta solta.

Além da tecla usaremos o led builtin do arduino para acender ou apagar pelo comando dessa tecla.

Portanto, nas portas do arduino teremos :
Arduino            Utilização
D13                    Led Builtin
D0         Chave de comando
 */

// Definindo onde nossas coisas estão conectadas
int tecla = 0;            // D0 - Está ligado a Tecla
int led = 13;                // D13 - Está ligado nosso led bultin
int letcla = 1;            //aqui será lido o estado da tecla
// ou poderia ser        const int led = LED_BUILTIN;    // é o número da porta do led : D13 ou IO13
boolean estado = false;            //estado do led atual - false=apagado, true=aceso

// Esta rotina roda apenas uma vez na inicialização :
void setup() {
    pinMode(tecla, INPUT);         // definindo a porta de leitura da tecla como entrada
    pinMode(led, OUTPUT);     // definindo a porta do led como saída
    digitalWrite(led,LOW);        //apagando o led inicialmente
}
// Loop eterno:
void loop() {
    letcla = digitalRead(tecla);             // lembre-se : 0=botão pressionado, 1=botão solto

    if(letcla == 0) {                         // lendo a chave : 0=pressionada
        estado = !estado;                    //inverte a variável estado : se true fica false e se false fica true
    }

    if(estado == true) {                         // status = true = acender led
        digitalWrite(led,HIGH);                // acendendo o led
    }
        else {                                            // status = false = apagar o led
        digitalWrite(led,LOW);                //apagando o led
    }

    delay(500);                             // Aguardar 500 ms

}


Funcionamento :

Criamos uma variável no arduino chamada estado que guarda o estado do led. Se for false indicará led apagado e se for true indicará led aceso.
Se a tecla for pressionada inverteremos o estado dessa variável estado.
Aí dependendo do valor da variável estado acendemos ou apagamos o led.
Aumentei o delay para 500 ms para não fazer a rotina de correção de debounce da tecla porque não desejamos a repetição da tecla e neste projeto não é critico, poderíamos aguardar mais ainda.